var createError = require('http-errors')
var express = require('express')
var path = require('path')
var cookieParser = require('cookie-parser')
var logger = require('morgan')
var ejs = require('ejs')
var url = require('url')
var authFilter = require('./authFilter.js')
const { tokenVerification } = require('./middleware/index.js')

var indexRouter = require('./routes/index')

var app = express()
app.all('*', function (req, res, next) {
	res.header('Access-Control-Allow-Origin', '*') //跨域问题
	res.header('Access-Control-Allow-Headers', 'Content-Type,token')
	res.header('Content-Type', 'application/json;charset=utf-8')
	next()
})
// view engine setup
app.set('views', path.join(__dirname, 'views'))
app.set('view engine', 'jade')
// app.engine('html', ejs.__express);
// app.set('view engine', 'html');

app.use(logger('dev'))
app.use(express.json())
app.use(express.urlencoded({ extended: false }))
app.use(cookieParser())
app.use(express.static(path.join(__dirname, 'public')))

var session = require('express-session')
app.use(session({
	secret: 'keyboard cat',
	resave: true,
	saveUninitialized: true
}))
app.use('/', (req, res, next) => {
	if (req.headers.type === 'web') {
		next()
	} else {
		if (req.url.indexOf('login') > -1 || req.url.indexOf('/static') > -1 ||
		  req.url.indexOf('captcha') > -1) {
			next()
		} else {
			tokenVerification(req.headers.token).then(async result => {
				if (!authFilter(req, res, result)) {
					let obj = {
						code: 500,
						data: null,
						msg: '您暂无权限'
					}
					res.json(obj)
				} else {
					next()
				}
			}).catch(err => {
				let obj = {
					code: 401,
					data: null,
					msg: 'token失效'
				}
				res.json(obj)
			})
		}
	}
})
app.use("/", indexRouter);

// catch 404 and forward to error handler
app.use(function (req, res, next) {
	next(createError(404))
})

// error handler
app.use(function (err, req, res, next) {
	// set locals, only providing error in development
	res.locals.message = err.message
	res.locals.error = req.app.get('env') === 'development' ? err : {}

	// render the error page
	res.status(err.status || 500)
	res.render('error')
})

module.exports = app
